package com.cy.pj.module.controller;

import com.cy.pj.module.pojo.RequestParameter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.Map;

@RestController
public class ParamObjectController {
    /*
     * 请求url: http://localhost/doHandleRequestParam01?name=Charles&startDate=1990/12/12
     *
     * @RequestParam,该注解required属性默认是ture.
     *
     * @DateTimeFormat日期格式，默认格式yyyy-MM-dd HH:mm:ss,修改用pattern属性
     *
     * 整数型参数推荐用Integer
     */
    @RequestMapping("/doHandleRequestParam01")
    public String doHandleRequestParam01(String name,
                                         @DateTimeFormat(pattern = "yyyy-MM-dd")
                                         @RequestParam(required = false) Date startDate) {
        return "request param is name=" + name + ", startDate=" + startDate;
    }

    /*
     * url: http://localhost/doHandleRequestParam02/10/30
     *
     * Rest风格的url定义
     * rest风格：一种软件架构编码风格，这种风格定义了url的一种格式，其语法
     * /a/b/{c}/d/{e},其中{}内部内容为变量
     *
     * 方法参数名需要与url中的变量名相同
     *
     * @PathVariable可以加参数，不推荐
     */
    @RequestMapping("/doHandleRequestParam02/{ids}/{code}")
    public String doHandleRequestParam02(@PathVariable("ids") Integer id, @PathVariable Integer code) {
        return "request param id=" + id + ",code=" + code;
    }

    /*
     * url: http://localhost/doHandleRequestParam03?name=Charles&startDate=2020-12-6
     */
    @RequestMapping("/doHandleRequestParam03")
    public String doHandleRequestParam03(RequestParameter pojo) {
        return "request params " + pojo.getName() + ", " + pojo.getStartDate();
    }

    /*
     * url: http://localhost/doHandleRequestParam04/Charles/2020-12-6
     */
    @RequestMapping("/doHandleRequestParam04/{name}/{startDate}")
    public String doHandleRequestParam04(RequestParameter pojo) {
        return "request params " + pojo;
    }

    /*
     * url: http://localhost/doHandleRequestParam05?name=Charles&startDate=2020-12-6
     * url: http://localhost/doHandleRequestParam05?name=Charles&startDate=2020-12-56 不对请求参数作限制
     *
     * 不想写JOPO对象，且请求参数比较多 -- Map(一般不推荐)
     *
     * 请求参数需要@RequestParam注解,该注解只能接受带"?"形式的url
     */
    @RequestMapping("/doHandleRequestParam05")
    public String doHandleRequestParam05(@RequestParam Map<String,Object> map) {
        return "request params " + map.toString();
    }

    /*
     * url: http://localhost/doHandleRequestParam07/Charles/2020-12-6 不对请求参数作限制
     *
     * 当使用map接收rest风格中的数据是，需要使用@PathVariable注解对map参数进行描述。
     * 不能使用@RequestParam注解，因为此注解描述的参数只能接收普通url中"?"符号后面定义的参数值
     */
    @RequestMapping("/doHandleRequestParam07/{name}/{startDate}")
    public String doHandleRequestParam07(@PathVariable Map<String,Object> map) {
        return "request params " + map.toString();
    }
}
